package com.example.aacwebdemo.jdk.v9.f;

/**
 * @author zhao.xin06679
 * @date 2021年06月29日 16:02
 */
public class Test {

//    //takeWhile()的使用：
//    //用于从 Stream 中获取一部分数据，接收一个 Predicate 来进行选择。在有序的 Stream 中，takeWhile 返回从开头开始的尽量多的元素。
//    // 注意：这个和 filter 是不同的，他是从开头找，凡是有一个不满足就结束了。
//    public void test1(){
//        List<Integer> list = Arrays.asList(45,56,33,77,44,98,76,78,33);
//        Stream<Integer> stream = list.stream();
//        stream.takeWhile(x -> x < 70).forEach((x)->{System.out.print(x+" ");});
//
//        System.out.println("\n--------------------------");
//        List<Integer> list1 = Arrays.asList(1,2,3,4,5,6,7,8);
//        list1.stream().takeWhile(x -> x < 5).forEach((x)->{System.out.print(x+" ");});
//    }
//
//    //dropWhile()的使用：
//    //dropWhile 的行为与 takeWhile 相反，返回剩余的元素。
//    //2.dropWhile():与 takeWhile() 整好相反
//    //takeWhile() + dropWhile() 就是一个完整的流
//    public void test2(){
//        List<Integer> list = Arrays.asList(45,56,33,77,44,98,76,78,33);
//        Stream<Integer> stream = list.stream();
//        stream.dropWhile(x -> x < 70).forEach((x)->{System.out.print(x+" ");});
//
//        System.out.println("\n--------------------------");
//        List<Integer> list1 = Arrays.asList(1,2,3,4,5,6,7,8);
//        list1.stream().dropWhile(x -> x < 5).forEach((x)->{System.out.print(x+" ");});
//    }
//
//    //ofNullable()的使用：
//    //
//    //Java 8 中 Stream 不能完全为 null（一个元素不能为 null 多个元素是可以存在 null ）
//    // ，否则会报空指针异常。而 Java 9 中的 ofNullable 方法允许我们创建一个单元素 Stream
//    // ，可以包含一个非空元素，也可 以创建一个空 Stream。
//
//    //3.ofNullable(T t): t可以为null
//    public void test3(){
//        // 不报异常，允许通过
//        Stream<Integer> stream1 = Stream.of(1, 2, 3, null);
//        stream1.forEach(System.out::println);
//
//        // 不报异常，允许通过
//        List<String> list = new ArrayList<>();
//        list.add("AA");
//        list.add(null);
//        System.out.println(list.stream().count());//2
//        System.out.println("------------------------------");
//
////如果只有单个元素，此元素不能为null.否则报NullPointerException
////        Stream<Object> stream2 = Stream.of(null);
//
//        //jdk 9 :新增ofNullable(T t):
//        Stream<String> stream3 = Stream.ofNullable("Tom");
//        System.out.println(stream3.count());//1
//
////ofNullable() ：允许值为 null
//        Stream<String> stream4 = Stream.ofNullable(null);
//        System.out.println(stream4.count());//0
//    }
//
//    //iterator()重载的使用：
//    //4.iterator()重载的方法
//    public void test4(){
//        //复习：Stream的实例化：
//        // ①通过集合的stream()
//        // ②通过数组工具类：Arrays
//        // ③ Stream中静态方法：of()
//        // ④iterator() / generate()
//        Stream.iterate(0,x -> x + 1).limit(10).forEach(System.out::println);//原来的控制终止方式
//        System.out.println();
//        Stream.iterate(0,x -> x < 10,x -> x + 1).forEach(System.out::println);//现在的终止方式
//
//    }
//
//    //Optional 类中 stream()的使用
//    public void test1() {
//        List<String> list = new ArrayList<>();
//        list.add("Tom");
//        list.add("Jerry");
//        list.add("Tim");
//        Optional<List<String>> optional = Optional.ofNullable(list);
//
////    Stream<List<String>> stream = optional.stream();
////    System.out.println(stream.count());//返回 1 当成了 list 集合
//
//        Stream<String> stream = optional.stream().flatMap(x -> x.stream());
////  System.out.println(stream.count()); //返回 3
//        stream.forEach(System.out::println); //有终止操作 前面注释的是不可以同时使用的
//    }
//



}
